/*
 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.spi.orbutil.threadpool;

import java.io.Closeable;

public interface ThreadPoolManager extends Closeable {

  /**
   * This method will return an instance of the threadpool given a threadpoolId,
   * that can be used by any component in the app. server.
   *
   * @throws NoSuchThreadPoolException thrown when invalid threadpoolId is passed as a parameter
   */
  public ThreadPool getThreadPool(String threadpoolId) throws NoSuchThreadPoolException;

  /**
   * This method will return an instance of the threadpool given a numeric threadpoolId.
   * This method will be used by the ORB to support the functionality of
   * dedicated threadpool for EJB beans
   *
   * @throws NoSuchThreadPoolException thrown when invalidnumericIdForThreadpool is passed as a
   * parameter
   */
  public ThreadPool getThreadPool(int numericIdForThreadpool) throws NoSuchThreadPoolException;

  /**
   * This method is used to return the numeric id of the threadpool, given a String
   * threadpoolId. This is used by the POA interceptors to add the numeric threadpool
   * Id, as a tagged component in the IOR. This is used to provide the functionality of
   * dedicated threadpool for EJB beans
   */
  public int getThreadPoolNumericId(String threadpoolId);

  /**
   * Return a String Id for a numericId of a threadpool managed by the threadpool
   * manager
   */
  public String getThreadPoolStringId(int numericIdForThreadpool);

  /**
   * Returns the first instance of ThreadPool in the ThreadPoolManager
   */
  public ThreadPool getDefaultThreadPool();

  /**
   * Return an instance of ThreadPoolChooser based on the componentId that was
   * passed as argument
   */
  public ThreadPoolChooser getThreadPoolChooser(String componentId);

  /**
   * Return an instance of ThreadPoolChooser based on the componentIndex that was
   * passed as argument. This is added for improved performance so that the caller
   * does not have to pay the cost of computing hashcode for the componentId
   */
  public ThreadPoolChooser getThreadPoolChooser(int componentIndex);

  /**
   * Sets a ThreadPoolChooser for a particular componentId in the ThreadPoolManager. This
   * would enable any component to add a ThreadPoolChooser for their specific use
   */
  public void setThreadPoolChooser(String componentId, ThreadPoolChooser aThreadPoolChooser);

  /**
   * Gets the numeric index associated with the componentId specified for a
   * ThreadPoolChooser. This method would help the component call the more
   * efficient implementation i.e. getThreadPoolChooser(int componentIndex)
   */
  public int getThreadPoolChooserNumericId(String componentId);
}

// End of file.
